package grupo2.bj;
import java.util.*;

/** El sabot es una lista de 8 mazos. 
  * El mismo puede llenarse y devolver cartas una a una.
  * @author Grupo 2. */
public class Sabot {

	private List<Carta> cartas = new ArrayList<Carta>();
	private int mazos=8;
	
	/**
	 * Constructor. Crea un objeto sabot con las cartas ya incorporadas.
	 * @author Grupo 2.
	 * @param void.
	 * @return una instancia del objeto Sabot.
	 */
	public Sabot(){
		this.llenarSabot();
	}

	/**
	 * Entrega una carta de su lista . De suceder que se quede sin cartas, se llena
	 * y procede con la entrega de la misma.
	 * @author Grupo 2.
	 * @param void.
	 * @return un objeto tipo Carta.
	 */
	public Carta entregarCarta(){
		if(this.estoyVacio())
		{
			this.llenarSabot();
			return this.entregarCarta();
		}
		else
			return this.cartas.remove(this.obtenerPosicionCarta());
	}

	/**
	 * @author Grupo 2.
	 * @param void.
	 * @return un objeto tipo List de cartas.
	 */
	public List<Carta> getCartas() {
		return cartas;
	}

	/**
	 * @author Grupo 2.
	 * @param un objeto tipo Lista de cartas.
	 * @return void.
	 */
	public void setCartas(List<Carta> cartas) {
		this.cartas = cartas;
	}
	
	/**
	 * Verifica si el sabot tiene cartas en su lista.
	 * @author Grupo 2.
	 * @param void.
	 * @return boolean. True: si esta vacio. False: si tiene cartas.
	 */
	public boolean estoyVacio(){
		return this.cartas.isEmpty();
	}
	
	/**
	 * Llena la lista de cartas, correspondiente a 8 mazos de pocker.
	 * @author Grupo 2.
	 * @param void.
	 * @return void.
	 */
	public void llenarSabot(){
		for(int mazo=1; mazo<=mazos; mazo++){
			for(int i=1; i<=4; i++){
				for(int j=2; j<=13; j++)
					this.cartas.add(new Carta(j,i));
			}
		}
		for(int mazo=1; mazo<=mazos; mazo++){
			for(int i=1; i<=4; i++){
				this.cartas.add(new As(i));
			}
		}
	}
	
	/**
	 * Genera un numero aleatorio que reprenta la posicion 
	 * de uno de los objetos contenidos en la lista de cartas.
	 * @author Grupo 2.
	 * @param void.
	 * @return int.
	 */
	public int obtenerPosicionCarta(){
		Random random = new Random();
		return random.nextInt(this.cartas.size()) + 1;
	}
	
	/**
	 * Deja vacio al sabot, es decir, lo deja sin cartas.
	 * @author Grupo 2.
	 * @param void.
	 * @return void.
	 */
	public void reset(){
		this.cartas.removeAll(this.cartas);
	}

	public int getMazos() {
		return mazos;
	}

	public void setMazos(int mazos) {
		this.mazos = mazos;
	}

}
